import Taro from '@tarojs/taro'

export interface DialogOptions {
  /** 标题 */
  title?: string
  /** 内容 */
  content: string
  /** 确认按钮文字 */
  confirmText?: string
  /** 取消按钮文字 */
  cancelText?: string
  /** 是否显示取消按钮 */
  showCancel?: boolean
}

/**
 * useDialog Hook
 * 提供 Promise 化的对话框调用方式
 */
export const useDialog = () => {

  /**
   * 显示确认对话框
   * @param options 对话框配置
   * @returns Promise<boolean> 用户是否确认
   */
  const confirm = async (options: DialogOptions): Promise<boolean> => {
    return new Promise((resolve) => {
      Taro.showModal({
        title: options.title || '提示',
        content: options.content,
        confirmText: options.confirmText || '确定',
        cancelText: options.cancelText || '取消',
        showCancel: options.showCancel !== false,
        success: (res) => {
          resolve(res.confirm)
        },
        fail: () => {
          resolve(false)
        },
      })
    })
  }

  /**
   * 显示警告对话框（仅确认按钮）
   * @param options 对话框配置
   * @returns Promise<void>
   */
  const alert = async (options: DialogOptions): Promise<void> => {
    return new Promise((resolve) => {
      Taro.showModal({
        title: options.title || '提示',
        content: options.content,
        confirmText: options.confirmText || '确定',
        showCancel: false,
        success: () => {
          resolve()
        },
        fail: () => {
          resolve()
        },
      })
    })
  }

  /**
   * 显示删除确认对话框
   * @param itemName 要删除的项目名称
   * @returns Promise<boolean>
   */
  const confirmDelete = async (itemName?: string): Promise<boolean> => {
    return confirm({
      title: '确认删除',
      content: itemName ? `确定要删除"${itemName}"吗？` : '确定要删除吗？',
      confirmText: '删除',
    })
  }

  /**
   * 显示退出确认对话框
   * @returns Promise<boolean>
   */
  const confirmExit = async (): Promise<boolean> => {
    return confirm({
      title: '确认退出',
      content: '确定要退出当前操作吗？未保存的内容将丢失。',
      confirmText: '退出',
    })
  }

  return {
    confirm,
    alert,
    confirmDelete,
    confirmExit,
  }
}

export default useDialog

